/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cz.vse.adventura.po1715.xshet00_shevtsova.hra;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IListener;
import cz.vse.adventura.po1715.xshet00_shevtsova.hra.Object;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 *
 * @author TShevtsova
 */
public class Rozhovor {

//== KONSTANTNI ATRIBUTY TRIDY =================================================

    private static final String NEMOHU =
            "Bohužel vám nemohu %s vydat.\n" +
            "Vemte si něco jiného nebo zavřete ledničku.";

    private static final String ZADEJ_CELE_CISLO =
            "Musíte zadat svůj %s jako celé číslo.\n" +
            "Zkuste to ještě jednou.";

    /** Posluchači očekávající oznámení o začátku a konci rozhovoru. */
    private static final List<IListener<Boolean>> posluchaciRozhovoru =
                         new ArrayList<IListener<Boolean>>();



//== PROMENNE ATRIBUTY TRIDY ===================================================

    private static int krok = 0;

    private static int vek = 0;

    private static Object  objekt;
    private static String   názevObjektu;



//== KONSTANTNI ATRIBUTY INSTANCI ==============================================
//== PROMENNE ATRIBUTY INSTANCI ================================================
//== NESOUKROME METODY TRIDY ===================================================

//##############################################################################
//== KONSTRUKTORY A TOVARNI METODY =============================================

    /** Soukromý konstruktor bránící vytvoření instancí. */
    private Rozhovor()  {/**/}



//== ABSTRAKTNI METODY =========================================================
//== NESOUKROME METODY INSTANCI ================================================
//
//    /***************************************************************************
//     * Odstartuje rozhovor o nemožnosti jednoduchého odebrání zadaného předmětu.
//     *
//     * @param alkohol Předmět, který che hráč odebrat z ledničky
//     * @return První část rozhovoru pronesená zadaným předmětem
//     */
//    static String start(Předmět alkohol)
//    {
//        Stav.ROZHOVOR    = true;
//        for (IListener<Boolean> ipb : posluchaciRozhovoru) {
//            ipb.notice(true);
//        }
//
//        Rozhovor.objekt = alkohol;
//        názevObjektu    = alkohol.getName();
//        krok = 1;
//        return BERE_ALKOHOL+ názevObjektu + "." + KOLIK_LET;
////        return String.format(
////                "Pokoušíte si vzít z inteligentní ledničky %s.\n" +
////                "Tato lednička neumožňuje podávání alkoholických nápojů " +
////                "mladistvým.\nKolik je vám let?",
////                nazevPartnera);
//    }


    /***************************************************************************
     * Reaguje na odpovědi uživatele na svoje minulé otázky.
     *
     * @param  text Odpověď uživatele
     * @return Další otázka, případně závěr rozhovoru
     */
    static String reaguj( String text )
    {
        switch (krok)
        {
            case 1: return "jhcjd";
            default:
                throw new IllegalStateException (
                        "\nRozhovor se ocitl v neočekávaném stavu." );
        }
    }



//== SOUKROME A POMOCNE METODY TRIDY ===========================================

//    /***************************************************************************
//     * Reakce na první odpověď, v níž uživatel zadává svůj věk.
//     *
//     * @param text Věk uživatele
//     * @return Odpověď programu
//     */
//    private static String krok_1(String text) {
//        text = text.trim();
//        try {
//            vek = Integer.parseInt(text);
//        }catch(NumberFormatException nfe) {
//            return String.format(ZADEJ_CELE_CISLO, "věk");
//        }
//        if (vek < 18) {
//            Stav.ROZHOVOR = false;
//            return String.format(NEMOHU, názevObjektu);
//        }
//        krok = 2;
//        return NAROZEN;
////        return "V kterém roce jste se narodil(a)?";
//    }

//
//    /***************************************************************************
//     * Reakce na druhou odpověď, v níž uživatel zadává rok narození.
//     *
//     * @param text Věk uživatele
//     * @return Odpověď programu
//     */
//    @SuppressWarnings("boxing")
//    private static String krok_2(String text) {
//        text = text.trim();
//        int rok;
//        try {
//            rok = Integer.parseInt(text);
//        }catch(NumberFormatException nfe) {
//            return String.format(ZADEJ_CELE_CISLO, "rok narození");
//        }
//        int letos = Calendar.getInstance().get(Calendar.YEAR);
//        int vek2  = letos - rok;
//
//        Stav.ROZHOVOR = false;
//        for (IListener<Boolean> ipb : posluchaciRozhovoru) {
//            ipb.notice(true);
//        }
//
//        if (Math.abs(vek - vek2) > 1) {
//            return String.format(
//                    "Vámi udaných %s let neodpovídá roku narození %s\n" +
//                    NEMOHU, vek, rok, názevObjektu);
//        }
//        Mistnost.getAktuálníMístnost().zvedni(názevObjektu);
//        Hra_destnik.getHra().getBag().přidej(objekt);
//        return ODEBRAL + názevObjektu + NEZAPOMEŇ;
////        return String.format(
////                "Věřím vám a předávám vám požadovaný nápoj." +
////              "\nOdebral(a) jste z ledničky: %s" +
////              "\nDobrou chuť. Nezapomeňte zavřít ledničku.",
////                názevObjektu);
//    }
//

    /***************************************************************************
     * Přidá zadaného posluchače do seznamu posluchačů,
     * kterým hra oznamuje začátek a konec rozhovoru.
     *
     * @param posluchač Přihlašovaný posluchač
     */
    public static void přihlašPosluchačeRozhovoru(IListener<Boolean> posluchač)
    {
        posluchaciRozhovoru.add(posluchač);
    }


    /***************************************************************************
     * Odebere zadaného posluchače ze seznamu posluchačů,
     * kterým hra oznamuje začátek a konec rozhovoru.
     *
     * @param posluchač Odhlašovaný posluchač
     */
    public static void odhlašPosluchačeRozhovoru(IListener<Boolean> posluchač)
    {
        posluchaciRozhovoru.remove(posluchač);
    }





//== SOUKROME A POMOCNE METODY INSTANCI ========================================
//== VNORENE A VNITRNI TRIDY ===================================================
//== TESTY A METODA MAIN =======================================================
}
